package middleware

import (
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"time"
)

const (
	// maxAge 定义了 CORS 请求的最大缓存时间（小时）
	maxAge = 12
)

// Cors 是一个中间件函数，用于添加跨域资源共享（CORS）相关的请求头
func Cors() gin.HandlerFunc {
	return cors.New(cors.Config{
		// AllowOrigins 定义允许的跨域请求的源，"*" 表示允许所有源
		AllowOrigins: []string{"*"},
		// AllowMethods 定义允许的 HTTP 请求方法
		AllowMethods: []string{"PUT", "PATCH", "GET", "POST", "OPTIONS", "DELETE"},
		// AllowHeaders 定义允许的请求头
		AllowHeaders: []string{"Origin", "Authorization", "Content-Type", "Accept"},
		// ExposeHeaders 定义暴露给客户端的响应头
		ExposeHeaders: []string{"Content-Length"},
		// AllowCredentials 表示是否允许携带凭证（如 cookies）
		AllowCredentials: true,
		// AllowOriginFunc 是一个自定义函数，用于判断请求的源是否被允许
		// 这里定义只有源为 "https://github.com" 的请求才被允许
		AllowOriginFunc: func(origin string) bool {
			return origin == "https://github.com"
		},
		// MaxAge 定义预检请求的结果可以被缓存的最长时间
		MaxAge: maxAge * time.Hour,
	})
}
